#ifndef __DETU_MEDIA_SYS_CTRL_MGR_H__
#define __DETU_MEDIA_SYS_CTRL_MGR_H__

#include "defs.h"
#include "types.h"
#include "json/json.h"

namespace detu_media
{
class SysCtrlMgr
{
protected:
	SysCtrlMgr() {};
	virtual ~SysCtrlMgr() {};

public:

	static SysCtrlMgr* instance(void);
	
	virtual S_Result start(void) { return S_OK; };
	
	virtual S_Result stop(void) { return S_OK; };
	
	virtual bool isStarted(void) { return false; };

	virtual S_Result setViVpssMode(const Json::Value& config = Json::Value::null) { return S_OK; };

	virtual S_Result bind(const Json::Value& config) { return S_OK; };

	virtual S_Result unbind(const Json::Value& config) { return S_OK; };

	virtual S_Result mmzAlloc(Uint64_t* pu64PhyAddr, void** ppVirAddr,
                                  const char* pstrMmb, const char* pstrZone, Uint32_t u32Len) { return S_OK; };

	virtual S_Result mmzFree(Uint64_t u64PhyAddr, void* pVirAddr) { return S_OK; };

    virtual S_Result mmzAlloc_Cached(Uint64_t* pu64PhyAddr, void ** ppVirAddr,
                                            const char* pstrMmb, const char* pstrZone, Uint32_t u32Len){ return S_OK; };

    virtual void* mMap(Uint64_t u64PhyAddr, Uint32_t u32Size){ return NULL; };
    
    virtual S_Result mmUnMap(void  *  pVirAddr, Uint32_t u32Size){ return S_OK; };

    virtual Uint32_t  getBlock(Uint32_t    Pool,Uint64_t u64BlkSize,char* pcMmzName){ return 0; };

    virtual Int32_t releaseBlock(Uint32_t Block){return 0;};

    virtual Uint64_t handle2PhysAddr(Uint32_t Block){return 0;};
};

}

#endif

